package top.wshape1.shiziapi.project.service;

import org.springframework.web.multipart.MultipartFile;
import top.wshape1.shiziapi.common.domain.vo.PageVo;
import top.wshape1.shiziapi.project.domain.vo.*;

import java.util.List;

/**
 * @author Wshape1
 * @version 1.0
 * @description
 * @since 2023-10-22
 */


public interface DocumentService {


    /**
     * 获取文档列表
     *
     * @param projectId
     * @param id
     * @return
     */
    List<DocVo> docList(Long projectId, Long id);

    /**
     * 创建目录或文档
     *
     * @param createDocVo
     * @param userId
     * @return
     */
    Long create(CreateDocVo createDocVo, Long userId);

    /**
     * 重命名文档目录
     *
     * @param renameDocVo
     * @param userId
     */
    void rename(RenameDocVo renameDocVo, Long userId);

    /**
     * 删除文档目录
     *
     * @param deleteDocVo
     * @param userId
     */
    void delete(DeleteDocVo deleteDocVo, Long userId);

    /**
     * 修改文档的order和parentFolderId
     *
     * @param reorderDocVo
     */
    void reorder(ReorderDocVo reorderDocVo);

    /**
     * 批量更新文档order
     *
     * @param reorderDocVos
     */
    void reorderBatch(List<ReorderDocVo> reorderDocVos);

    /**
     * 清空项目的所有文档
     *
     * @param projectId
     */
    void clearProject(long projectId);

    /**
     * 上传图片
     *
     * @param image
     * @return
     */
    UploadImageRespVO uploadImage(MultipartFile image);

    /**
     * 获取文档版本详情
     *
     * @param projectId
     * @param docId
     * @param version
     * @param docType
     * @return
     */
    DocVersionVo queryDocVersion(Long projectId, Long docId, String version, Integer docType);

    /**
     * 保存文档版本
     *
     * @return
     */
    Long saveDocVersion(DocVersionSaveVo docVersionSaveVo);


    /**
     * 获取文档版本列表
     */
    PageVo listPageDocVersion(DocVersionQueryVo docVersionQueryVo, Long page, Long limit);

    /**
     * 获取文档版本详情，包含文档内容
     */
    DocVersionVo getDocVersionWithContent(Long projectId, Long docId, String version, Integer docType);

    boolean deleteDocVersion(Long id, Long projectId);

    Object getDocument(Long docId, Integer docType);

    String getDocumentName(Long docId, Integer docType);

    /**
     * 开始编辑，并设置当前编辑者
     *
     * @param startEditVo
     * @return 文档编辑者 or null
     */
    Long startEdit(StartEditVo startEditVo);

    /**
     * 结束编辑，若是当前用户则清空
     *
     * @param startEditVo
     */
    void stopEdit(StartEditVo startEditVo);

    void summaryDocument(Long projectId, Long docId, String docType);

    DocSummaryVo getSummaryDocument(Long projectId, Long docId, String docType);

    DocSummaryGeneratingVo isSummaryGenerating(Long projectId, Long docId, String docType);
}
